/*
 **********************************************************
 *
 * Programme :	liste.c
 *
 * ecrit par :	BAYRAMOV Matin & IBRAHIMLI Nihat
 *
 * resume : 		contient les entetes des fonctions utiles
 * 				pour la manupilation sur les listes
 *
 * date :   		Feb 6, 2013
 *
 ***********************************************************
 */

#include <stdio.h>
#include <stdlib.h>

#ifndef LISTE_H_
#define LISTE_H_

/**	CODE D'ERREUR GENERALE **/
#define RES_OK 20
#define PROBLEME_MEMOIRE 18



/**	CODE D'ERREUR CONCERNANT QUE DES LISTES **/

#define FIRST_ELEMT_VALUE -1
#define LISTE_NULL 8
#define LISTE_NON_NULL -2
#define LISTE_INVALIDE -3
#define LISTE_VIDE 9
#define REMOVE_ELEMENT_INVALIDE -5
#define ELEMENT_INEXISTANT 9
#define ELEMENT_DEJA_EXISTANT 33


typedef struct TypVoisins {
	// numero du voisin
	int voisin;
	// poids de l'arete
	double poidsVoisin;
	// le voisin precedent
	struct TypVoisins* voisinPrecedent;
	// le voisin suivant
	struct TypVoisins* voisinSuivant;
} TypVoisins;

// Crée une liste ayant un seul element
int createListElement(TypVoisins**, int, double);

// Ajoute un element à la fin d'une liste
int addEndElement(TypVoisins**, int, double);

// Ajoute un element au debut d'une liste
int addBeginningElement(TypVoisins**, int, double);

// Clone a type voisins
int cloneTypVoisins(TypVoisins*, TypVoisins**);

// Supprime un element depuis une liste
int removeElement(TypVoisins**, int);

// Cherche si un element exist dans une liste
int elementExist(TypVoisins*, int);

// retourne le nombre d'element d'une liste
int sizeOfElements(TypVoisins*);

// Affiche une liste
int printListe(TypVoisins*);

// Affiche une liste à l'invers
int printListeInverse(TypVoisins*);

int writeListToFile(TypVoisins*, FILE *file);

// Libere la memoire d'une liste
int freeListe(TypVoisins**);

#endif /* LISTE_H_ */
